#include "../libreria.h"
#include <time.h>

#define NUM_FOTO_MAX 100

int main(int argc, char * argv[])
{
	int i;
	char command[BUFFER_SIZE],buf[BUFFER_SIZE],nome_foto_originale[BUFFER_SIZE];
	char nome_foto[NUM_FOTO_MAX][50];

	char ip_service_register[10];
	int porta_service_register;
	
	int foto_scelta,mode_scelto;
	
	if(argc!=3)
		{
		printf("Errore numero parametri:\nUsage: ./client ip_service_register porta_service_register\n");
		exit(1);
		}
	
	strcpy(ip_service_register,argv[1]);
	porta_service_register=atoi(argv[2]);

	

	while(1)
	{

		printf("\nINIZIO CICLO CLIENT\n");		
		memset(command,0,sizeof(command));
	
		for(i=0; i<NUM_FOTO_MAX; i++)
			memset(nome_foto[i],0,sizeof(nome_foto[i]));

		if(system ("find foto/*.jpg > ./foto.txt")==-1)
				{printf("Errore nella chiamata di sistema\n");
				exit(1);}
		
		FILE *f;

		srand(time(NULL));
		mode_scelto= rand()%2;
	

		if (mode_scelto == 0)
		{
		//leggo un file a caso dal disco
	
			i=0;			
			printf("Client ha scelto di usare immagine presente su disco\n");
			f=fopen("foto.txt","r");

			while(fscanf(f,"%s",nome_foto[i])!= EOF)
				{i++;
				 if(i==NUM_FOTO_MAX)
					{
					 printf("Alcuni file potrebbero non essere stati presi in considerazione\nSuperato limite MAX!\n");
					 break;
					 }
				}
	
			fclose (f);

			srand(time(NULL));
			foto_scelta= rand()%(i);
			printf("Client ha scelto immagine %s da inviare al Service Provider\n",nome_foto[foto_scelta] );
		
		}
		else
		{
		// leggo un file dal secondo service_provider
	
			printf("Client ha scelto di usare immagine presente su Service Provider 2\n");

			memset(command,0,sizeof(command));
			sprintf(command,"./client_get_list %s %d Get_List",ip_service_register,porta_service_register);
			if(system(command)==-1)
				{printf("Errore nella chiamata di sistema\n");
				exit(1);}
	
		

			f=fopen("foto_server.txt","r");
			i=0;
			while(fscanf(f,"%s",nome_foto[i])!= EOF)
				{i++;
				 if(i==NUM_FOTO_MAX)
					{
					 printf("Alcuni file potrebbero non essere stati presi in considerazione\nSuperato limite MAX!\n");
					 break;
					 }
				}

			fclose (f);

			srand(time(NULL));
			foto_scelta= rand()%i;
			printf("Client ha scelto immagine %s (tra quelle disponibili) da ricevere dal Service Provider\n",nome_foto[foto_scelta]);

			memset(buf,0,sizeof(buf));
	
			sprintf(buf,"%s",nome_foto[foto_scelta]);
			sprintf(command,"./client_get_image %s %d Get_Image %s",ip_service_register,porta_service_register,buf);
			if(system(command)==-1)
				{printf("Errore nella chiamata di sistema\n");
				exit(1);}
	
			memset(buf,0,sizeof(buf));	
			sprintf(buf,"foto/%s",nome_foto[foto_scelta]);
			strcpy(nome_foto[foto_scelta],buf);
		}

	
		srand(time(NULL));
		mode_scelto= rand()%2;
	
	
		if (mode_scelto == 0)
		{
			
			// L'immagine scelta viene ruotata

			printf("Client ha scelto di ruotare l'immagine\n");
			memset(command,0,sizeof(command));
			sprintf(command,"./client_rotate_image %s %d Rotate_Image %s sx",ip_service_register,porta_service_register,nome_foto[foto_scelta]);
			if(system(command)==-1)
			{
				printf("Errore nella chiamata di sistema\n");
				exit(1);
			}
		}
	
		else
		{

			// L'immagine scelta viene specchiata
			printf("Client ha scelto di specchiare l'immagine\n");
			memset(command,0,sizeof(command));
	
			sprintf(command,"./client_horizontal_flip_image %s %d Horizontal_Flip_Image %s",ip_service_register,porta_service_register,nome_foto[foto_scelta]);
			if(system(command)==-1)
			{
				printf("Errore nella chiamata di sistema\n");
				exit(1);
			}

		}
	
		memset(command,0,sizeof(command));
		i=0;
		while(nome_foto[foto_scelta][i++]!='/');
		strcpy(nome_foto_originale,&nome_foto[foto_scelta][i]);

		memset(buf,0,sizeof(buf));
		sprintf(buf,"foto_temp/%s",nome_foto_originale);
	
		sprintf(command,"./client_store_image %s %d Storage_Image %s",ip_service_register,porta_service_register,buf);
		if(system(command)==-1)
				{printf("Errore nella chiamata di sistema\n");
				exit(1);}

		unlink(buf);

		sleep(8);
	}



	
	


}

